﻿///////////////////////////////////////////////////////////////////////////////
//MathConversion.h
//
//描述：
//		导出过程中会用到的数学转换工具
//
//历史：
//		08-01-09	创建
///////////////////////////////////////////////////////////////////////////////
#ifndef __MATH_CONVERSION_H__
#define __MATH_CONVERSION_H__

/////////////////////////////////////////////////////////////////////////////////////////////
void MatrixFromMatrix3(grp::Matrix& m44, const Matrix3& mat3);

/////////////////////////////////////////////////////////////////////////////////////////////
inline void Vector2FromPoint3(grp::Vector2& v2, const Point3& p3)
{
	v2.X = p3.x;
	v2.Y = p3.y;
}

/////////////////////////////////////////////////////////////////////////////////////////////
inline void Vector3FromPoint3(grp::Vector3& v3, const Point3& p3)
{
	v3.X = p3.x;
	v3.Y = p3.y;
	v3.Z = p3.z;
}

/////////////////////////////////////////////////////////////////////////////////////////////
inline void DWORDFromPoint3(DWORD& dw, const Point3& p3)
{
	BYTE r,g,b;
	r = (BYTE)(p3.x * 255);
	g = (BYTE)(p3.y * 255);
	b = (BYTE)(p3.z * 255);
	dw = (r << 24) | (g << 16) | (b << 8);
}

/////////////////////////////////////////////////////////////////////////////////////////////
inline void Vector3SwapYZ(grp::Vector3& v)
{
	float fTemp = v.Y;
	v.Y = v.Z;
	v.Z = fTemp;
}

/////////////////////////////////////////////////////////////////////////////////////////////
void GetTransformFromMatrix3(const Matrix3& mat3,
							  grp::Vector3& vTranslation,
							  grp::Quaternion& qRotation,
							  grp::Vector3& vScale);

/////////////////////////////////////////////////////////////////////////////////////////////
void CalculateTangent(const grp::Vector3 v[3],
					   const grp::Vector2 uv[3],
					   int index,
					   grp::Vector3& vTangent,
					   grp::Vector3& vBinormal);

#endif